package com.ciban.smarthome.module.engine;

import android.content.Context;

import com.ciban.smarthome.common.utils.RegexUtils;
import com.ciban.smarthome.common.utils.StringUtils;
import com.ciban.smarthome.common.utils.logcrash.LogUtil;
import com.ciban.smarthome.module.db.dao.AreaDao;
import com.ciban.smarthome.module.db.dao.ConfigDao;
import com.ciban.smarthome.module.entity.Area;
import com.ciban.smarthome.module.entity.EquiTypeInfo;

import java.util.ArrayList;

/**
 * Created by wdl on 2015/11/5.
 * 区域相关的业务逻辑
 */
public class AreaEngine {
    private Context context;
    private AreaDao dao;


    private ArrayList<Area> areaList;

    private Area area;
    private ArrayList<EquiTypeInfo> equTypeList;

    public AreaEngine(Context context,Area area) {
        this.context = context;
        this.area=area;
        equTypeList=parseEquipTypeList(this.area.getEquip_list());
    }

    public AreaEngine(Context context) {
        this.context = context;
    }

    public ArrayList<EquiTypeInfo> getEquTypeList() {
        return equTypeList;
    }

    public Area getArea() {
        return area;
    }

    public void setArea(Area area) {
        this.area = area;
    }

    /**
     * 刷新当前区域的详细信息，主要针对区域详情的
     */
    public void refreshAreaDetails(){
        checkDao();
        area=dao.getAreaDetails(area.getId());
        equTypeList.clear();
        equTypeList.addAll(parseEquipTypeList(area.getEquip_list()));
    }

    /**
     * 添加新的区域
     * @param info
     * @return
     */
    public boolean addNewArea(Area info) {
        checkDao();
        long id = dao.addNewArea(info);
        return id > 0;
    }

    /**
     * 根据id 获取区域的详细信息
     * @param id
     * @return
     */
    public Area getAreaDetails(String id){
        checkDao();;
        return dao.getAreaDetails(id);
    }

    /**
     * 根据区域id 删除某个区域
     * @param id
     * @return
     */
    public boolean delArea(String id) {
        checkDao();
        return dao.delArea(id) > 0;
    }

    /**
     * 获取所有的区域列表
     * @return
     */
    public ArrayList<Area> getAreaList() {
        if (areaList == null)
            areaList = getAreaListFromDb();
        return areaList;
    }

    /**
     * 从数据库读取区域列表
     * @return
     */
    private ArrayList<Area> getAreaListFromDb() {
        checkDao();
        return dao.getAreaList();
    }

    /**
     * 刷新区域列表（eg.添加了新的区域 用于刷新缓存数据）
     */
    public void refreshAreaList() {
        if (areaList == null)
            return;
        areaList.clear();
        areaList.addAll(getAreaListFromDb());
    }

    /**
     * 将区域对应的设备类型给解析出来
     *
     * @param equipstr
     * @return
     */
    private ArrayList<EquiTypeInfo> parseEquipTypeList(String equipstr) {
        LogUtil.d(AreaEngine.class,"解析区域对应的设备类型列表："+equipstr);
        ArrayList<EquiTypeInfo> list = new ArrayList<EquiTypeInfo>();
        if (!StringUtils.isEmpty(equipstr)) {
            ConfigDao cdao = new ConfigDao();
            if (!StringUtils.isEmpty(equipstr)) {
                String[] split = equipstr.split(",");

                EquiTypeInfo info;
                for (int i = 0; i < split.length; i++) {
                    if (!StringUtils.isEmpty(split[i]) && RegexUtils.isNumStr(split[i])) {
                        info = cdao.getEquip(Integer.parseInt(split[i]));
                        list.add(info);
                    }
                }
            }
            cdao = null;
        }
        LogUtil.d(AreaEngine.class,"解析区域对应的设备类型列表："+list.size());
        return list;
    }

    /**
     * 当第一次进入app 没有区域信息 自动添加信息
     */
    public void initDbContent() {
        checkDao();
        Area info = new Area();
        info.setName("客厅");
        info.setEquip_list("1,2,3");
        dao.addNewArea(info);

        info.setName("卧室");
        info.setEquip_list("1,2,3");
        dao.addNewArea(info);

        areaList = getAreaListFromDb();
    }


    private void checkDao() {
        if (dao == null)
            dao = new AreaDao(context);
    }

    public void destory() {
        dao = null;
    }


}
